package cn.marinda.resturants.service;

import cn.marinda.resturants.entity.Activity;
import cn.marinda.resturants.entity.Orders;
import cn.marinda.resturants.global.Pages;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/** 活动服务层 用于处理服务相关信息
 * @date 2021/11/18
 * @author  Marinda
 *
 */
public interface ActivityService extends IService<Activity> {

    /**
     * 删除由uid
     *
     * @param uid uid
     * @return boolean
     */
    boolean deleteActivity(String uid);
    /** 查询所有活动列表数据
     * @date 2021/11/18
     *
     * @return 活动列表
     */
    @Select("select * from r_activity")
    List<Activity> queryList();


    /** 通过查询uid来返回一个活动列表
     *
     * @param uid 列表uid
     * @return 活动
     */
    @Select("select * from r_activity where uid =#{uid}")
    Activity selectByUid(String uid);

    /** 通过模糊查询内容来获取某个活动
     *
     * @param content 内容
     * @return 活动
     */
    @Select("select * from r_activity where content like CONCAT('%',#{content},'%')")
    Activity selectContentLike(String content);

    /** 通过模糊查询标题来获取某个活动
     *
     * @param title 标题
     * @return 活动
     */
    @Select("select * from r_activity where title = #{title}")
    Activity selectTitleLike(String title);

    /** 通过模糊查询链接来找到这个活动
     *
     * @param href 链接
     * @return 活动
     */
    @Select("select * from r_activity where href like CONCAT('%',#{href},'%')")
    Activity selectHrefLike(String href);

    /** 增加一个活动
     *
     * @param activity 活动
     * @return 活动
     */
    boolean addActivity(Activity activity);

    /** 一个悲观锁查询
     * 要加事务处理回滚操作。
     * @date 2021/11/18
     * @author Marinda
     */
    @Select("select * from r_activity where uid = #{uid} for update")
    Activity selectPessimisticLock(String uid);

    /** 一个乐观锁修改数据
     *
     * @param activity 活动
     * @return 活动
     */
    @Update("update r_activity set" +
            "uid = #{uid}" +
            "title = #{title}" +
            "content = #{content}" +
            "href =#{href}" +
            "description = #{description}" +
            "version =version+1 " +
            "where uid=#{uid} where and version=#{version} ")
    boolean updateOptimisticLock(Activity activity);

    /** 分页
     *
     * @param pages 分页
     * @return 分页结果
     */
    IPage<Activity> selectActivityPages(Pages<?> pages);
}
